from faker import Faker  
from datetime import datetime  
import random  
  
# 创建一个Faker实例，可以选择不同的locale来获取不同语言的数据  
fake = Faker('zh_CN')  # 使用中文  
  
def generate_question():  
    # 定义一个函数来生成选择题数据    
    question_id = fake.uuid4()  # 使用UUID作为题目ID，因为自增主键需要数据库支持  
    question_text = fake.sentence(nb_words=10, variable_nb_words=True)  # 生成题目内容  
    difficulty_levels = ['简单', '中等', '困难']  
    difficulty_level = random.choice(difficulty_levels)  # 随机选择难度等级  
    category = fake.word()  # 生成一个随机的类别或章节名  
      
    # 生成选项  
    options = [fake.sentence(nb_words=6, variable_nb_words=True) for _ in range(4)]  # 默认生成四个选项  
    correct_index = random.randint(0, 3)  # 随机选择一个正确答案的索引  
    correct_answer = 'ABCD'[correct_index]  # 将索引转换为对应的字母  
      
    # 解析/答案说明  
    explanation = f"正确答案是{options[correct_index]}，因为..." + fake.sentence(nb_words=6, variable_nb_words=True)  
      
    # 时间戳  
    # created_at = fake.date_time_this_year()  
    # # 生成一个随机的时间差（例如，0到30天之间）  
    # time_delta = timedelta(days=random.randint(0, 30))  
    # updated_at = created_at + time_delta  # 确保updated_at晚于created_at 
      
    # 是否启用  
    is_active = random.choice([True, False])  # 随机决定题目是否启用  
      
    # 关联试卷ID（这里我们假设不生成，因为通常题目和试卷是多对多的关系）  
    exam_id = None  # 或者可以是一个指向试卷表的外键，但这里不生成  
      
    # 题目类型（对于选择题，这里可以固定为'单选'或根据需求修改）  
    question_type = '单选'  # 假设所有生成的都是单选题  
      
    # 组装数据  
    question_data = {  
        'QuestionID': str(question_id),  
        'QuestionText': question_text,  
        'DifficultyLevel': difficulty_level,  
        'Category': category,  
        'OptionA': options[0],  
        'OptionB': options[1],  
        'OptionC': options[2],  
        'OptionD': options[3] if len(options) > 3 else None,  # 如果只有三个选项，则OptionD为None  
        'CorrectAnswer': correct_answer,  
        'Explanation': explanation,  
        # 'CreatedAt': created_at.strftime('%Y-%m-%d %H:%M:%S'),  
        # 'UpdatedAt': updated_at.strftime('%Y-%m-%d %H:%M:%S'),  
        'IsActive': is_active,  
        'ExamID': exam_id,  
        'QuestionType': question_type  
    }  
      
    return question_data  

# # 生成并打印一个选择题  
# question_data = generate_question()  
# print("题目:", question_data['question'])  
# for idx, option in enumerate(question_data['options'], start=1):  
#     print(f"选项{idx}: {option}")  
# print("解析:", question_data['explanation'])  
# print("正确答案:", question_data['correct_answer'])